Ext.define('AgenteNET.controller.Conexao', {
	extend : 'Ext.app.Controller',
	monitorTempo : 30,

	models : ['utilitarios.Recurso',
			 'MinhaConexao', 'meuRecurso' ],
	views : [ 'Usuario', 'MenuGlobal' ],

	init : function() {
		this.control({
			'button' : {
				click : this.solicitar
			},
			'grid' : {
				itemdblclick : function() {
					var a = arguments;
					a[0] = arguments[0].panel;
					Ext.Function.bind(this.solicitar, this, a)();
				}
			},
		});
		this.inicializado = true;
		this.monitorConexao();
	},

	conexao : null,
	monitorConexao : function() {
		var token = Ext.util.Cookies.get('token');
		if (token) {
			var modelConexao = this.getModel('MinhaConexao');
			modelConexao.load(null, {
				scope : this,
				success : function(model, op) {
					this.conexao = model;
					this.execute('Dispositivo', 'atualizar');
					if (ExecutarRecurso) {
						this.executeRecurso(ExecutarRecurso);
						ExecutarRecurso = null;
					}
					Ext.defer(this.monitorConexao, this.monitorTempo * 1000,
							this);
				},
				failure : function(model, op) {
					Ext.util.Cookies.clear('token');
					this.execute('Dispositivo', 'atualizar');
				}
			});
		} else {
			if (!Ext.getCmp('Login')) {
				// this.execute('Dispositivo', 'atualizar');
				this.execute('Autenticacao', 'login');
			}
		}
	},

	solicitar : function(cmp) {
		if (cmp.executarRecurso != undefined) {
			this.executeRecurso(cmp.executarRecurso, arguments);
		} else if (cmp.controle != undefined) {
			this.execute(cmp.controle, cmp.funcao, arguments);
		}
	},

	execute : function(controle, funcao, parametros) {
		var controller = this.application.getController(controle);
		if (!controller.inicializado) {
			controller.init();
			controller.inicializado = true;
			controller.conexao = this;
			controller.dispositivo = this.application
					.getController('Dispositivo');
		}

		if (!funcao) {
			console.log('Recurso sem uma função '
					+ 'determinada para o controle ' + controle);
		} else {
			if (controller[funcao] == undefined) {
				console.log('Função ' + funcao + ' não encontrada no controle '
						+ controle);
			} else {
				var method = controller[funcao];
				return Ext.Function.bind(method, controller, parametros)();
			}
		}
		return null;
	},

	executeRecurso : function(recurso, parametros) {
		if (parametros == undefined)
			parametros = [ {} ];

		var meuRecurso = this.conexao.meusRecursos()
				.findRecord('nome', recurso);
		if (meuRecurso) {
			var controle = meuRecurso.get('controle');
			var funcao = meuRecurso.get('funcao');
			parametros[0]._recurso = meuRecurso;
			this.execute(controle, funcao, parametros);
		} else {
			console.log('Recurso (' + recurso + ')  nao encontrado');
		}
	},

});
